home *** CD-ROM | disk | FTP | other *** search
/ Aminet 8 / Aminet 8 (1995)(GTI - Schatztruhe)[!][Oct 1995].iso / Aminet / dev / gcc / gcc270_src.lha / gcc-2.7.0-amiga / config / m68k / atari.h < prev    next >
C/C++ Source or Header  |  1995-06-15  |  4KB  |  120 lines

  1. /* Definitions of target machine for GNU compiler.
  2.    Atari TT ASV version.
  3.    Copyright (C) 1994 Free Software Foundation, Inc.
  4.  
  5. This file is part of GNU CC.
  6.  
  7. GNU CC is free software; you can redistribute it and/or modify
  8. it under the terms of the GNU General Public License as published by
  9. the Free Software Foundation; either version 1, or (at your option)
  10. any later version.
  11.  
  12. GNU CC is distributed in the hope that it will be useful,
  13. but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15. GNU General Public License for more details.
  16.  
  17. You should have received a copy of the GNU General Public License
  18. along with GNU CC; see the file COPYING.  If not, write to
  19. the Free Software Foundation, 59 Temple Place - Suite 330,
  20. Boston, MA 02111-1307, USA.  */
  21.  
  22. #include "m68k/m68kv4.h"
  23.  
  24. /* Dollars and dots in labels are not allowed. */
  25.  
  26. #define NO_DOLLAR_IN_LABEL
  27. #define NO_DOT_IN_LABEL
  28.  
  29. /* Alter assembler syntax for fsgldiv and fsglmul.
  30.    It is highly likely that this is a generic SGS m68k assembler dependency.
  31.    If so, it should eventually be handled in the m68k/sgs.h ASM_OUTPUT_OPCODE
  32.    macro, like the other SGS assembler quirks.  -fnf */
  33.  
  34. #define FSGLDIV_USE_S        /* Use fsgldiv.s, not fsgldiv.x */
  35. #define FSGLMUL_USE_S        /* Use fsglmul.s, not fsglmul.x */
  36.  
  37. /* At end of a switch table, define LDnnn iff the symbol LInnn was defined.
  38.    Some SGS assemblers have a bug such that "Lnnn-LInnn-2.b(pc,d0.l*2)"
  39.    fails to assemble.  Luckily "Lnnn(pc,d0.l*2)" produces the results
  40.    we want.  This difference can be accommodated by making the assembler
  41.    define such "LDnnn" to be either "Lnnn-LInnn-2.b", "Lnnn", or any other
  42.    string, as necessary.  This is accomplished via the ASM_OUTPUT_CASE_END
  43.    macro. (the Amiga assembler has this bug) */
  44.  
  45. #undef ASM_OUTPUT_CASE_END
  46. #define ASM_OUTPUT_CASE_END(FILE,NUM,TABLE)                \
  47. do {                                    \
  48.   if (switch_table_difference_label_flag)                \
  49.     asm_fprintf ((FILE), "\t%s %LLD%d,%LL%d\n", SET_ASM_OP, (NUM), (NUM));\
  50.   switch_table_difference_label_flag = 0;                \
  51. } while (0)
  52.  
  53. int switch_table_difference_label_flag;
  54.  
  55. /* This definition of ASM_OUTPUT_ASCII is the same as the one in m68k/sgs.h,
  56.    which has been overridden by the one in svr4.h.  However, we can't use
  57.    the one in svr4.h because the ASV assembler croaks on some of the
  58.    strings that it emits (such as .string "\"%s\"\n"). */
  59.  
  60. #undef ASM_OUTPUT_ASCII
  61. #define ASM_OUTPUT_ASCII(FILE,PTR,LEN)                \
  62. {                                \
  63.   register int sp = 0, lp = 0, ch;                \
  64.   fprintf ((FILE), "\t%s ", BYTE_ASM_OP);                \
  65.   do {                                \
  66.     ch = (PTR)[sp];                        \
  67.     if (ch > ' ' && ! (ch & 0x80) && ch != '\\')        \
  68.       {                                \
  69.     fprintf ((FILE), "'%c", ch);                \
  70.       }                                \
  71.     else                            \
  72.       {                                \
  73.     fprintf ((FILE), "0x%x", ch);                \
  74.       }                                \
  75.     if (++sp < (LEN))                        \
  76.       {                                \
  77.     if ((sp % 10) == 0)                    \
  78.       {                            \
  79.         fprintf ((FILE), "\n\t%s ", BYTE_ASM_OP);        \
  80.       }                            \
  81.     else                            \
  82.       {                            \
  83.         putc (',', (FILE));                    \
  84.       }                            \
  85.       }                                \
  86.   } while (sp < (LEN));                        \
  87.   putc ('\n', (FILE));                        \
  88. }
  89.  
  90. /* Override these for the sake of an assembler bug: the ASV
  91.    assembler can't handle .LC0@GOT syntax.  This pollutes the final
  92.    table for shared librarys but what's a poor soul to do; sigh... RFH */
  93.  
  94. #undef ASM_GENERATE_INTERNAL_LABEL
  95. #define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM)    \
  96.   if (flag_pic && !strcmp(PREFIX,"LC"))            \
  97.     sprintf (LABEL, "*%s%%%d", PREFIX, NUM);        \
  98.   else                            \
  99.     sprintf (LABEL, "*%s%s%d", LOCAL_LABEL_PREFIX, PREFIX, NUM)
  100.  
  101. #undef ASM_OUTPUT_INTERNAL_LABEL
  102. #define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM)    \
  103.   if (flag_pic && !strcmp(PREFIX,"LC"))            \
  104.     asm_fprintf (FILE, "%s%%%d:\n", PREFIX, NUM);    \
  105.   else                            \
  106.     asm_fprintf (FILE, "%0L%s%d:\n", PREFIX, NUM)
  107.  
  108. /* Define how to generate (in the callee) the output value of a function
  109.    and how to find (in the caller) the value returned by a function.  VALTYPE
  110.    is the data type of the value (as a tree).  If the precise function being
  111.    called is known, FUNC is its FUNCTION_DECL; otherwise, FUNC is 0.
  112.    For the Atari generate the result in d0 or fp0 as appropriate. */
  113.  
  114. #undef FUNCTION_VALUE
  115. #define FUNCTION_VALUE(VALTYPE, FUNC)            \
  116. (TREE_CODE (VALTYPE) == REAL_TYPE && TARGET_68881    \
  117.  ? gen_rtx (REG, TYPE_MODE (VALTYPE), 16)        \
  118.  : gen_rtx (REG, TYPE_MODE (VALTYPE), 0))
  119.  
  120.